package org.monster.context.reader;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * xml阅读器
 *
 * @param <E>
 * @author Monster
 */
public abstract class XmlReader<E> {

    /**
     * xml标签
     */
    private List<E> xmlTags = new ArrayList<>();

    /**
     * 获取 根元素
     *
     * @param file 文件
     * @return 元素
     * @throws DocumentException 文档异常
     */
    public Element getRootElement(File file) throws DocumentException {
        if (file != null) {
            SAXReader reader = new SAXReader();
            Document document = reader.read(file);
            return document.getRootElement();
        }
        return null;
    }

    /**
     * 名称比较
     *
     * @param element 元素
     * @param tagName 标签名
     * @return 布尔
     */
    public boolean nameEquals(Element element, String tagName) {
        return element.getName().equals(tagName);
    }

    /**
     * 清除 元素
     */
    public void clearElement() {
        getXmlTags().clear();
    }

    /**
     * 获取 标签 集合
     *
     * @return 标签 集合
     */
    public abstract List<E> getTags();

    /**
     * 获取 标签
     *
     * @param name 名称
     * @return 标签
     */
    public abstract E getTag(String name);

    /**
     * 解析 元素
     *
     * @param element 元素
     */
    public abstract void resolveElement(Element element);

    /**
     * 获取 xml标签 集合
     *
     * @return xml标签 集合
     */
    public List<E> getXmlTags() {
        return xmlTags;
    }

    /**
     * 设置 xml标签 集合
     *
     * @param xmlTags xml标签 集合
     */
    public void setXmlTags(List<E> xmlTags) {
        this.xmlTags = xmlTags;
    }
}
